const momentService = require("../service/moment.service");

class MomentController {
  /**
   * 动态创建
   * @param ctx
   * @param next
   */
  async create(ctx, next) {
    // 1.获取动态的内容
    const { content } = ctx.request.body;

    // 2.动态由谁发布(token => id/name)
    const { id } = ctx.user;

    // 3.将动态相关的数据保存到数据库中
    const result = await momentService.create(content, id);

    ctx.body = {
      code: 0,
      message: "创建用户动态成功~",
      data: result,
    };
  }
  /**
   * 动态列表
   * @param ctx
   * @param next
   */
  async list(ctx, next) {
    // 获取offset/size
    const { offset, size } = ctx.query;

    // 从数据库中查询动态类表数据
    const result = await momentService.queryList(offset, size);

    // 返回数据
    ctx.body = {
      code: 0,
      data: result,
      total: result.length,
    };
  }
  /**
   * 动态详情
   * @param ctx
   * @param next
   */
  async detail(ctx, next) {
    // 1.获取动态momentId
    const { momentId } = ctx.params;

    // 2.查询动态详情
    const result = await momentService.queryById(momentId);

    // // 3.返回数据
    ctx.body = {
      code: 0,
      data: result[0],
    };
  }
  /**
   * 动态删除
   * @param ctx
   * @param next
   */
  async remove(ctx, next) {
    // 获取动态id
    const { momentId } = ctx.params;
    // 删除对应动态
    const result = await momentService.remove(momentId);

    // 返回数据
    ctx.body = {
      code: 0,
      message: "删除动态成功~",
      data: result,
    };
  }
  /**
   * 动态更新
   * @param ctx
   * @param next
   */
  async update(ctx, next) {
    // 获取动态id
    const { momentId } = ctx.params;
    // 1.获取动态的内容
    const { content } = ctx.request.body;

    // 修改对应动态
    const result = await momentService.updateById(momentId, content);

    // 返回数据
    ctx.body = {
      code: 0,
      message: "动态更新成功~",
      data: result,
    };
  }
  // 为moment添加label
  async addLabels(ctx, next) {
    // 1.获取参数
    const { labels } = ctx;
    const { momentId } = ctx.params;

    // 2.将moment_id和label_id保存到数据库的moment_label表中
    try {
      for (const label of labels) {
        // 2.1 判断label_id是否已经和moment_id已经存在该数据(在moment_label表中)
        const isExists = await momentService.hasLabel(momentId, label.id);
        if (!isExists) {
          // 2.2不存在moment_id和label_id的关系数据
          const reslut = await momentService.addLabel(momentId, label.id);
        }
      }
      ctx.body = {
        code: 0,
        message: "为动态添加标签成功~",
      };
    } catch (error) {
      ctx.body = {
        code: -3001,
        message: "为动态添加标签失败，请检查数据有问题~",
      };
    }
  }
}

module.exports = new MomentController();
